#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 自己编写一个 扩容    
int * my_realloc(int * arr , size_t size)
{
    // 1. 安全检查
    if(size == 0 && arr!=NULL)
    {
        free(arr);
        return NULL;
    }
    // 如果原指针为空，相当于 malloc
    if(arr == NULL)
    {
        printf("空指针\n");
        return (int *)malloc(size * sizeof(int));
    }

    // 2. 创建新空间
    int *new = (int *)malloc(size*sizeof(int));
    if (new == NULL)
    {
        // 如果分配失败，返回 NULL
        return NULL;
    }
    // 3. 将老空间的数据 赋值 新空间
    memcpy(new,arr,size/2*sizeof(int));
    
    // 4. 释放老空间
    free(arr);
    // 5. 返回新空间的地址
    return new;
}

int main(int argc, char const *argv[])
{
    int len = 5;
     // 初始化一个数组
    int *arr = (int *)malloc(len * sizeof(int));

    //填充数组
    for (size_t i = 0; i < len; i++)
    {
        arr[i] = i + 1;
    }

    //打印原数组
    printf("原数组: ");
    for (size_t j = 0; j < len; j++)
    {
        printf("%d ", arr[j]);
    }
    printf("\n");


    int new_len = 10;
    int *new_arr = (int *)my_realloc(arr,new_len);
    if (new_arr == NULL)
    {
        perror("my_realloc failed");
        return 1;
    }

    // 填充新数组的剩余部分
    for (size_t i = len; i < new_len; i++)
    {
        new_arr[i] = i + 1;
    }

    // 打印新数组
    printf("扩容后的数组: ");
    for (size_t i = 0; i < new_len; i++)
    {
        printf("%d ", new_arr[i]);
    }
    printf("\n");

    // 释放新数组
    free(new_arr);
    


    return 0;
}
